<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript">
//         1. 
// function Test(name,age){
//             this.name = name;
//             this.age = age;
//         }
//         obj = {}

// // 分别使用call，apply为obj添加name，age属性
//         Test.call(obj,"111","12");
//         // Test.apply(obj,["222","13"]);
//         console.log(obj);



// 2.
// 实现周飘买车，其中有sayHi方法，功能:打印'周飘买了一辆红色的2.0宝马车'
        // function peoson(name){
        //     this.name=name
        // }
        // function buy(name,color,type,displacement){
        //     peoson.call(this,name)
        //     this.color = color;
        //     this.type = type;
        //     this.displacement = displacement;
            
        //     console.log(name + "买了一辆" + color + "色的" + displacement + type + "车");
        // }

        // function sayHi() {
        //     buy.call(this,"周飘","红","宝马","2.0");
        // }
        // sayHi();
        

        // 3.使用圣杯模式实现：
        // 父类：Shape
        // 子类:Circle（求圆面积）
        // function Shape(r){
        //     this.r = r;
        // }
       
        // function Circle(){
        // }

        // function name(i,o) {
            
        //     function temp(){}
        //     temp.prototype = o.prototype;
        //     i.prototype = new temp();
        //     i.prototype = i;
        // }
        // name(Circle,Shape);
        // var circle = new Circle();
        // Circle.prototype.area = function () {
        //     console.log(this.r * this.r *3.14);
        // }
        // circle.r = 8;
        // circle.area();

        

        var inherit = (function(){
        //知识点:闭包可以实现属性私有化
        var F = function(){};
        return function(Target,Origin){
            F.prototype = Origin.prototype; //
            Target.prototype = new F(); //思考:如果放在上一句之前呢
            Target.prototype.constructor = Target;   
            Target.prototype.uber = Origin.prototype; 
        }
        }())
        inherit(Son,Father)
        var son = new Son();
        var father = new Father();

        // GO{
        //     inherit -> undefined ->f(t,o){}
        //     f -> undefined -> 
        //     son -> undefined -> Son()
        //     father -> undefined -> Father()
        // }
        // AO{
        //     f -> undefined -> f(){}
        // }
    </script>
</body>
</html>